Questa domanda ha già una risposta qui: Invertire una stringa in Python (29 risposte) Chiuso 4 anni fa. Sto cercando di invertire una stringa e utilizzando il codice seguente ma il valore dell'elenco inverso risultante è Nessuno. Il codice: str_a = 'Questo è mescolato' rev_word = str_a.split () rev_word = rev_word.reverse () rev_word = '' .join (rev_word) Restituisce TypeError. Perché?
2021-01-15 08:10:37
.reverse () restituisce Nessuno. Pertanto non dovresti assegnarlo a una variabile. Usa questo invece: stra = 'Questa è una stringa' revword = stra.split () revword.reverse () revword = ''. join (revword) Ho eseguito il codice su IDEOne per te in modo che tu possa vedere l'output. (Nota anche che l'output è stringaisThis; potresti invece voler usare '' .join (revword), con uno spazio.) Nota anche che il metodo che hai fornito inverte solo le parole, non il testo. @ ron.rothman ha fornito un collegamento che spiega in dettaglio come invertire una stringa nella sua interezza. | Questo è il mio modo preferito per invertire una stringa: stra = "Questa è una stringa" revword = stra [:: - 1] print (revword) # "gnirts a si sihT oppure, se vuoi invertire l'ordine delle parole: revword = "" .join (stra.split () [:: - 1]) print (revword) # "la stringa a è Questa" :) | Vari inversioni su una stringa: instring = 'Questa è una stringa' stringa inversa = istruzione [:: - 1] print reversestring # gnirts a si sihT wordsreversed = '' .join (word [:: - 1] for word in instring.split ()) print wordsreversed # sihT si a gnirts revwordorder = '' .join (parola per parola in instring.split () [:: - 1]) print revwordorder # stringa a è Questa revwordandorder = '' .join (word [:: - 1] for word in instring.split () [:: - 1]) print revwordandorder # gnirts a si sihT | Per riferimento futuro quando un oggetto ha un metodo come [] .reverse () generalmente esegue quell'azione sull'oggetto (cioè la lista è ordinata e non restituisce nulla, Nessuno) in contrasto con le funzioni incorporate come ordinato che esegue un'azione su un oggetto e restituisce un valore (cioè l'elenco ordinato) | >>> s = 'questa è una stringa' >>> s [:: - 1] "gnirts a si siht" >>> '' .join (invertito / i) "gnirts a si siht" | Il ciclo for itera la stringa dalla fine (ultima lettera) all'inizio (prima lettera) >>> s = "Puoi provare anche questo:]" >>> rev = '' >>> for i nell'intervallo (len (s) - 1, -1, -1): ... rev + = s [i] >>> rev ']: oot siht yrt nac uoY' | Sulla base di commenti e altre risposte: str_a = 'questa è una stringa' rev_word = '' .join (reversed (str_a.split ())) Il concatenamento dei metodi funziona in Python dopotutto ... | L'elenco inverso può essere eseguito utilizzando più di un modo. Come accennato nelle risposte precedenti, due sono molto importanti, uno con la funzione reverse () e due con la funzione di taglio. Sto dando alcuni spunti su quale dovremmo preferire. Dovremmo sempre usare la funzione reverse () per invertire una lista Python. Due ragioni, una inversione sul posto e due più veloci dell'altra. Ho alcune cifre per supportare la mia risposta, In [15]: len (l) Uscita [15]: 1000 In [16]:% timeit -n1 l.reverse () 1 loop, meglio di 3: 7,87 µs per loop In [17]:% timeit -n1 l [:: - 1] 1 loop, meglio di 3:10 µs per loop Per un elenco di 1000 interi, la funzione reverse () ha funzionato meglio rispetto allo slicing. | Non è la risposta che stai cercando? Sfoglia altre domande etichettate python o fai la tua domanda.